package TraLaLa.Ventanas.Song;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import TraLaLa.Cliente.ClienteUser.UserControler;
import TraLaLa.Servidor.GestorCanciones.CancionDTO;
import TraLaLa.Servidor.GestorUsuarios.Usuario;
import TraLaLa.Ventanas.User.IntroWindow;

public class SongsWindow extends JFrame implements ActionListener{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton canjear;
	private JButton volver;
	private ArrayList<CancionDTO> canciones;
	private Usuario usuario;
	private JTable tabla;
	private UserControler controler;
	private IntroWindow window;
	public SongsWindow(ArrayList<CancionDTO> canciones, Usuario user, UserControler controler, IntroWindow intro){
		this.usuario=user;
		this.canciones=canciones;
		this.controler= controler;
		this.window= intro;
		String[] array = {"Titulo","Artista","Precio"};
	
		
		tabla= new JTable(converToArray(), array);
		tabla.setBounds(0, 0, 500, 450);
		tabla.setRowSelectionInterval(0, 0);
		JScrollPane scrollpane = new JScrollPane(tabla);
		canjear = new JButton("Comprar");
		volver = new JButton("Volver");
		scrollpane.setBounds(0, 0, 500, 450);
		volver.addActionListener(this);
		canjear.addActionListener(this);
		
		this.setLayout(null);
		this.add(scrollpane);
		this.add(canjear);
		this.add(volver);
		
		
		canjear.setBounds(550,100,200,50);
		volver.setBounds(550,250,200,50);
		
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(800,500);
		this.setVisible(true);
		this.setAlwaysOnTop(true);
		this.setResizable(false);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==volver){
			this.dispose();
		}
		if(e.getSource()==canjear){
			int row=tabla.getSelectedRow();
			System.out.println(row);
			int puntosUser=usuario.getPuntos();
			if(canciones.get(row).getPrecio()>puntosUser){
				//no se puede comprar
				JOptionPane.showMessageDialog(this, "No tiene puntos suficientes", "Error", JOptionPane.ERROR_MESSAGE);
			}
			else{
				//se realiza la compra
				
				try {
					usuario.setPuntos(usuario.getPuntos()-canciones.get(row).getPrecio());
					controler.actualizarUsuario(usuario);
					
					
					try {
						controler.addCancion(usuario, canciones.get(row));
					} catch (RemoteException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (ClassNotFoundException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					JOptionPane.showMessageDialog(this, "Cancion adquirida", "Finalizado", JOptionPane.INFORMATION_MESSAGE);
					this.dispose();
					
				} catch (RemoteException e1) {
					usuario.setPuntos(puntosUser);
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					usuario.setPuntos(puntosUser);
					e1.printStackTrace();
				} catch (SQLException e1) {
					usuario.setPuntos(puntosUser);
					e1.printStackTrace();
				}
				window.actualizar();
				window.repaint();
			}
		}
	}
	
	
	private Object[][] converToArray(){
		Object [][] array= new Object[canciones.size()][3];
		for(int i=0; i<canciones.size();i++){
			array[i][0]=canciones.get(i).getTitulo();
			array[i][1]=canciones.get(i).getArtista();
			array[i][2]=canciones.get(i).getPrecio();
		}
		
		return array;
	}
}
